JavaScript 56.7%
TypeScript 42.6%
1import { NextRequest, NextResponse } from "next/server";2import { getIronSession } from "iron-session";3import { SessionData, sessionOptions } from "@/lib/session";4import { prisma } from "@/lib/prisma";5import { hashPassword, requireAdmin } from "@/lib/auth";67export async function PATCH(request: NextRequest, { params }: { params: { id: string } }) {8 const response = NextResponse.next();9 const session = await getIronSession<SessionData>(request, response, sessionOptions);10 if (!session.userId || !(await requireAdmin(session.userId))) return NextResponse.json({ error: "Forbidden" }, { status: 403 });1112 const body = await request.json();13 const data: Record<string, unknown> = {};14 if (body.name !== undefined) data.name = body.name;15 if (body.username !== undefined) data.username = body.username;16 if (body.role !== undefined) data.role = body.role;17 if (body.password) data.passwordHash = await hashPassword(body.password);1819 const user = await prisma.user.update({20 where: { id: params.id },21 data,22 select: { id: true, username: true, name: true, role: true },23 });24 return NextResponse.json(user);25}2627export async function DELETE(request: NextRequest, { params }: { params: { id: string } }) {28 const response = NextResponse.next();29 const session = await getIronSession<SessionData>(request, response, sessionOptions);30 if (!session.userId || !(await requireAdmin(session.userId))) return NextResponse.json({ error: "Forbidden" }, { status: 403 });31 if (params.id === session.userId) return NextResponse.json({ error: "Cannot delete yourself" }, { status: 400 });3233 await prisma.user.delete({ where: { id: params.id } });34 return NextResponse.json({ success: true });35}36